home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 / Programming Windows 95.iso / code / CHAP12 / PAGE1.C < prev    next >
C/C++ Source or Header  |  1995-12-31  |  8KB  |  266 lines

  1. /*----------------------------------
  2.    PAGE1.C -- Property sheet page 1
  3.               (c) Paul Yao, 1996
  4.   ----------------------------------*/
  5. #include <windows.h>
  6. #include <prsht.h>
  7. #include "property.h"
  8. #include "notify.h"
  9. #include "helper.h"
  10.  
  11. static LPDWORD pTheStyles ;
  12. extern BOOL bWizard ;
  13. extern HWND hwndMain ;
  14. extern HWND hwndModeless ;
  15.  
  16. DWORD FetchStyles (HWND hwndDlg) ;
  17.  
  18. //-------------------------------------------------------------------
  19. UINT CALLBACK 
  20. StylePageProc (HWND  hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
  21.      {
  22.      switch (uMsg)
  23.           {
  24.           case PSPCB_CREATE :
  25.                // Store pointer to style data
  26.                pTheStyles = (LPDWORD) ppsp->lParam ;
  27.                return TRUE ;
  28.  
  29.           case PSPCB_RELEASE :
  30.                return 0;
  31.           }
  32.  
  33.      return 0 ;
  34.      }
  35.  
  36. //-------------------------------------------------------------------
  37. BOOL CALLBACK 
  38. StyleDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  39.      {
  40.      switch (msg)
  41.           {
  42.           case WM_INITDIALOG :
  43.                {
  44.                BOOL bCheck ;
  45.                DWORD dwOrigStyle = *pTheStyles ;
  46.  
  47.                bCheck = (dwOrigStyle & WS_VISIBLE) ;
  48.                SetButtonCheck (hwndDlg, IDC_VISIBLE, bCheck) ;
  49.  
  50.                bCheck = (dwOrigStyle & WS_DISABLED) ;
  51.                SetButtonCheck (hwndDlg, IDC_DISABLED, bCheck) ;
  52.  
  53.                bCheck = (dwOrigStyle & WS_MINIMIZE) ;
  54.                SetButtonCheck (hwndDlg, IDC_MINIMIZE, bCheck) ;
  55.  
  56.                bCheck = (dwOrigStyle & WS_MAXIMIZE) ;
  57.                SetButtonCheck (hwndDlg, IDC_MAXIMIZE, bCheck) ;
  58.  
  59.                bCheck = (dwOrigStyle & WS_CLIPCHILDREN) ;
  60.                SetButtonCheck (hwndDlg, IDC_CLIPCHILDREN, bCheck) ;
  61.  
  62.                bCheck = (dwOrigStyle & WS_CLIPSIBLINGS) ;
  63.                SetButtonCheck (hwndDlg, IDC_CLIPSIBLINGS, bCheck) ;
  64.  
  65.                bCheck = (dwOrigStyle & WS_BORDER) ;
  66.                SetButtonCheck (hwndDlg, IDC_BORDER, bCheck) ;
  67.  
  68.                bCheck = (dwOrigStyle & WS_CAPTION) ;
  69.                SetButtonCheck (hwndDlg, IDC_CAPTION, bCheck) ;
  70.  
  71.                bCheck = (dwOrigStyle & WS_DLGFRAME) ;
  72.                SetButtonCheck (hwndDlg, IDC_DLGFRAME, bCheck) ;
  73.  
  74.                bCheck = (dwOrigStyle & WS_HSCROLL) ;
  75.                SetButtonCheck (hwndDlg, IDC_HSCROLL, bCheck) ;
  76.  
  77.                bCheck = (dwOrigStyle & WS_MAXIMIZEBOX) ;
  78.                SetButtonCheck (hwndDlg, IDC_MAXIMIZEBOX, bCheck) ;
  79.  
  80.                bCheck = (dwOrigStyle & WS_MINIMIZEBOX) ;
  81.                SetButtonCheck (hwndDlg, IDC_MINIMIZEBOX, bCheck) ;
  82.  
  83.                bCheck = (dwOrigStyle & WS_SYSMENU) ;
  84.                SetButtonCheck (hwndDlg, IDC_SYSMENU, bCheck) ;
  85.  
  86.                bCheck = (dwOrigStyle & WS_THICKFRAME) ;
  87.                SetButtonCheck (hwndDlg, IDC_THICKFRAME, bCheck) ;
  88.  
  89.                bCheck = (dwOrigStyle & WS_VSCROLL) ;
  90.                SetButtonCheck (hwndDlg, IDC_VSCROLL, bCheck) ;
  91.  
  92.                return TRUE ;
  93.           }
  94.  
  95.           case WM_COMMAND :
  96.                {
  97.                WORD wNotifyCode = HIWORD (wParam) ;
  98.                WORD wID = LOWORD (wParam) ;
  99.                HWND hwndSheet ;
  100.  
  101.                switch (wID)
  102.                     {
  103.                     case IDC_VISIBLE :
  104.                     case IDC_DISABLED :
  105.                     case IDC_MINIMIZE :
  106.                     case IDC_MAXIMIZE :
  107.                     case IDC_CLIPCHILDREN :
  108.                     case IDC_CLIPSIBLINGS :
  109.                     case IDC_BORDER :
  110.                     case IDC_CAPTION :
  111.                     case IDC_DLGFRAME :
  112.                     case IDC_HSCROLL :
  113.                     case IDC_MAXIMIZEBOX :
  114.                     case IDC_MINIMIZEBOX :
  115.                     case IDC_SYSMENU :
  116.                     case IDC_THICKFRAME :
  117.                     case IDC_VSCROLL :
  118.                          hwndSheet = GetParent (hwndDlg) ;
  119.                          PropSheet_Changed (hwndSheet, hwndDlg) ;
  120.                          break ;
  121.                     }
  122.                return TRUE ;
  123.                }
  124.  
  125.           case WM_HELP :
  126.                // Catch F1 key strike
  127.                MessageBox (hwndDlg, "WM_HELP Message Received",
  128.                            "StyleDlgProc", MB_OK) ;
  129.                return TRUE ;
  130.  
  131.           case WM_NOTIFY :
  132.                {
  133.                LPNMHDR pnmh = (LPNMHDR) lParam ;
  134.  
  135.                // Handle OK and Apply buttons
  136.                if (pnmh->code == PSN_APPLY)
  137.                     {
  138.                     HWND hwndPS ;
  139.                     HWND hwndActive ;
  140.  
  141.                     // Overwrite current style value
  142.                     *pTheStyles = FetchStyles (hwndDlg) ;
  143.  
  144.                     // Tell main window to re-create child window
  145.                     hwndPS = GetParent (hwndDlg) ;
  146.                     hwndActive = PropSheet_GetCurrentPageHwnd (hwndPS) ;
  147.  
  148.                     // Only re-create if we're the active page
  149.                     if (hwndDlg == hwndActive)
  150.                          PostMessage (hwndMain, PM_CREATEWINDOW, 0, 0L) ;
  151.                     }
  152.  
  153.                // Destroy modeless dialog on OK or Cancel
  154.                if ((IsWindowEnabled (hwndMain)) &&
  155.                    (pnmh->code == PSN_APPLY || pnmh->code == PSN_RESET))
  156.                     {
  157.                     LPPSHNOTIFY psh = (LPPSHNOTIFY) lParam ;
  158.                     HWND hwndPropSheet ;
  159.  
  160.                     // Ignore Apply button
  161.                     if (pnmh->code == PSN_APPLY && psh->lParam == 0)
  162.                          return TRUE ;
  163.  
  164.                     // Clicking OK or Cancel, destroy property sheet
  165.                     hwndPropSheet = GetParent (hwndDlg) ;
  166.                     DestroyWindow (hwndPropSheet) ;
  167.                     hwndModeless = NULL ;
  168.                     }
  169.  
  170.                // Enable Next button on wizard page
  171.                if (bWizard && pnmh->code == PSN_SETACTIVE)
  172.                     {
  173.                     HWND hwndSheet = GetParent (hwndDlg) ;
  174.                     PropSheet_SetWizButtons (hwndSheet, PSWIZB_NEXT) ;
  175.                     }
  176.                return TRUE ;
  177.                }
  178.  
  179.           default :
  180.                return FALSE ;
  181.           }
  182.      }
  183.  
  184. //-------------------------------------------------------------------
  185. DWORD FetchStyles (HWND hwndDlg)
  186.      {
  187.      DWORD dwStyle = WS_CHILD ;
  188.  
  189.      if (QueryButtonCheck (hwndDlg, IDC_VISIBLE))
  190.           {
  191.           dwStyle |= WS_VISIBLE ;
  192.           }
  193.  
  194.      if (QueryButtonCheck (hwndDlg, IDC_DISABLED))
  195.           {
  196.           dwStyle |= WS_DISABLED ;
  197.           }
  198.  
  199.      if (QueryButtonCheck (hwndDlg, IDC_MINIMIZE))
  200.           {
  201.           dwStyle |= WS_MINIMIZE ;
  202.           }
  203.  
  204.      if (QueryButtonCheck (hwndDlg, IDC_MAXIMIZE))
  205.           {
  206.           dwStyle |= WS_MAXIMIZE ;
  207.           }
  208.  
  209.      if (QueryButtonCheck (hwndDlg, IDC_CLIPCHILDREN))
  210.           {
  211.           dwStyle |= WS_CLIPCHILDREN ;
  212.           }
  213.  
  214.      if (QueryButtonCheck (hwndDlg, IDC_CLIPSIBLINGS))
  215.           {
  216.           dwStyle |= WS_CLIPSIBLINGS ;
  217.           }
  218.  
  219.      if (QueryButtonCheck (hwndDlg, IDC_BORDER))
  220.           {
  221.           dwStyle |= WS_BORDER ;
  222.           }
  223.  
  224.      if (QueryButtonCheck (hwndDlg, IDC_CAPTION))
  225.           {
  226.           dwStyle |= WS_CAPTION ;
  227.           }
  228.  
  229.      if (QueryButtonCheck (hwndDlg, IDC_DLGFRAME))
  230.           {
  231.           dwStyle |= WS_DLGFRAME ;
  232.           }
  233.  
  234.      if (QueryButtonCheck (hwndDlg, IDC_HSCROLL))
  235.           {
  236.           dwStyle |= WS_HSCROLL ;
  237.           }
  238.  
  239.      if (QueryButtonCheck (hwndDlg, IDC_MAXIMIZEBOX))
  240.           {
  241.           dwStyle |= WS_MAXIMIZEBOX ;
  242.           }
  243.  
  244.      if (QueryButtonCheck (hwndDlg, IDC_MINIMIZEBOX))
  245.           {
  246.           dwStyle |= WS_MINIMIZEBOX ;
  247.           }
  248.  
  249.      if (QueryButtonCheck (hwndDlg, IDC_SYSMENU))
  250.           {
  251.           dwStyle |= WS_SYSMENU ;
  252.           }
  253.  
  254.      if (QueryButtonCheck (hwndDlg, IDC_THICKFRAME))
  255.           {
  256.           dwStyle |= WS_THICKFRAME ;
  257.           }
  258.  
  259.      if (QueryButtonCheck (hwndDlg, IDC_VSCROLL))
  260.           {
  261.           dwStyle |= WS_VSCROLL ;
  262.           }
  263.  
  264.      return dwStyle ;
  265.      }
  266.